﻿#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
typedef int STDataType;


//class Date
//{
//public:
	/*Date()  名字和类的名字相同且没有返回值类型也不需要写void
	{
		_year = 1;
		_month = 1;
		_day = 1;
	}*/

/*Date(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}*/
//	void Print()
//	{
//		cout << _year << "/" << _month << "/" << _day << endl;
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//class Baby
//{
//public:
//
//private:
//	int _age;
//	Date birthday;
//	int _ID;
//	string name;
//};
//
//int main()
//{
//	Date d1;
//	d1.Print();
//
//	Baby b1;
//	
//	return 0;
//}

//class Date
//{
//public:
//	//构造函数
//	Date(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	//拷贝构造函数
//	//Date(const Date& d1)
//	//{
//	//	_year = d1._year;
//	//	_month = d1._month;
//	//	_day = d1._day;
//	//}
//
//	void Print();
//
//private:
//	int _year;
//	int _month;
//	int _day;
//};


class Stack
{
public:
	Stack(int n = 4)
	{
		_a = (STDataType*)malloc(sizeof(STDataType) * n);
		if (nullptr == _a)
		{
			perror("malloc申请空间失败");
			return;
		}
		_capacity = n;
		_top = 0;
	}
	//Stack(const Stack& st)
	//{
	//	// 需要对_a指向资源创建同样⼤的资源再拷⻉值 
	//	_a = (STDataType*)malloc(sizeof(STDataType) * st._capacity);
	//	if (nullptr == _a)
	//	{
	//		perror("malloc申请空间失败!!!");
	//		return;
	//	}
	//	memcpy(_a, st._a, sizeof(STDataType) * st._top);
	//	_top = st._top;
	//	_capacity = st._capacity;
	//}
	void Push(STDataType x)
	{
		if (_top == _capacity)
		{
			int newcapacity = _capacity * 2;
			STDataType* tmp = (STDataType*)realloc(_a, newcapacity *
				sizeof(STDataType));
			if (tmp == NULL)
			{
				perror("realloc fail");
				return;
			}
			_a = tmp;
			_capacity = newcapacity;
		}
		_a[_top++] = x;
	}
	~Stack()
	{
		cout << "~Stack()" << endl;
		free(_a);
		_a = nullptr;
		_top = _capacity = 0;
	}
private:
	STDataType* _a;
	size_t _capacity;
	size_t _top;
	
};

class MyQueue
{
public:
private:
	Stack pushst;
	Stack popst;
};

//成员函数的外部定义
//void Date::Print() 
//{
//	cout <<_year << "-" << _month << "-" << _day << endl;
//}

int main()
{
	//Date d1(2025, 1, 31);
	//Date d2(d1);
	//d2.Print();
	Stack st1;
	st1.Push(1);	
	st1.Push(2);

	 Stack st2 = st1;

	 MyQueue mq1;
	 // MyQueue⾃动⽣成的拷⻉构造，会⾃动调⽤Stack拷⻉构造完成pushst/popst 
	 // 的拷⻉，只要Stack拷⻉构造⾃⼰实现了深拷⻉，他就没问题 
	 MyQueue mq2 = mq1;

	return 0;
}